Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Задача апроксимації.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Програмного забезпечення (ПЗ)

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Чисельні методи в інформатиці
Група:
КН-3

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет Львівська політехніка Кафедра ПЗ До лабораторної роботи № 3 З курсу “Чисельні методи” На тему: “ Задача апроксимації”. Виконав: Студент групи КН-3 Львів – 2008 Тема: Задача апроксимації.. Мета: Оволодіти засобами розв’язування задач апрксимації.  Побудувати поліном Лагранжа для функції, заданої таблично та побудувати графік отриманого многочлена. Варіанти завдань: Таблиця 1 Номер точки Значення функції згідно номера варіанта    1  2  3  4  5  6  7   2  5.06e-10  4.51e-10  5.87e-10  4.75e-10  4.57e-10  4.52e-10  3.51e-10   Таблиця 2 Номер точки Значення функції згідно номера варіанта    8  9  10  11  12  13  14   2  2.10e-06  2.59e-06  2.11e-06  2.13e-06  2.19e-06  2.14e-06  1.13e-06    В процесі розроблення лабораторної роботи було розроблено наступний програмний продукт:  //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Main.h" #include <math.h> #include <string.h> //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMainForm *MainForm; //--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- double *TMainForm::LagrangeGetPolinom() { int i, j, k, h; double *Result = new double[COUNT]; double *Temp = new double[COUNT - 1]; double ResMul, ResAdd, Denom; int *Counter; for(i = 0; i < COUNT; i++) { Result[i] = 0.0; } for(h = 0; h < COUNT; h++) { Denom = 1.0; for(i = 0, j = 0; i < COUNT; i++) { if(i != h) { Temp[j] = -DATA_X[i]; Denom *= DATA_X[h] - DATA_X[i]; j++; } } for(i = 0; i < COUNT; i++) { ResAdd = 0.0; Counter = new int[i]; for(j = 0; j < i; j++) { Counter[j] = j; } for(j = 0; j < Factorial(COUNT - 1) / (Factorial(i) * Factorial(COUNT - 1 - i)); j++) { ResMul = 1.0; for(k = 0; k < i; k++) { ResMul *= Temp[Counter[k]]; } if(i != 0) { IncCounter(Counter, i, COUNT - 1, i - 1); } ResAdd += ResMul; } if(Denom != 0) { Result[i] += ResAdd / Denom * DATA_Y[h]; } delete[]Counter; } } return Result; } void TMainForm::LagrangeDrawGraph(const double *Data) { int i; double min, max, d; min = max = DATA_X[0]; for(i = 1; i < COUNT; i++) { if(DATA_X[i] < min) { min = DATA_X[i]; } if(DATA_X[i] > max) { max = DATA_X[i]; } } for(d = min; d <= max; d+=(max-min) / 100) { Chart->Series[0]->AddXY(d, Polynom(d, Data), "", TColor(5)); } } __int64 Factorial(__int64 x) { if(x < 2) { return 1; } return x * Factorial(x - 1); } int IncCounter(int *Counter, int Size, int Capacity, int Number) { Counter[Number]++; if(Counter[Number] > Capacity - Size + Number) { if(Number != 0) { Counter[Number] = IncCounter(Counter, Size, Capacity, Number - 1); Counter[Number]++; } else { Counter[Number] = Capacity - Size + Number; } } return Counter[Number]; } double Polynom(double x, const double *Data) { int i; double result = 0.0; for(i = 0; i < COUNT; i++) { result += pow(x, COUNT - 1 - i) * Data[i]; } return result; } void __fastcall TMainForm::FormCreate(TObject *Sender) { double *Data = LagrangeGetPolinom(); AnsiString str; LagrangeDrawGraph(Data); for(int i = 0; i < COUNT; i++) { str += " "; if(Data[i] > 0 && i != 0) { str += "+"; } str += FloatToStrF(Data[i], ffFixed, 3, 3) + "x^" + (COUNT - 1 - i); } str += " =y"; RichEdit->Clear(); RichEdit->Text = str; delete[]Data; } //---------------------------------------------------------------------------  Висновок...
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини